package com.winner.data.util;

import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.DES;
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import lombok.extern.slf4j.Slf4j;

/**
 * 对称加密Des
 *
 * @author wangxinle5
 * @since 2022-11-11
 */
@Slf4j
public class DesUtil {

    /**
     * <p>
     * Field : DES 加密解密秘钥
     * </p>
     */
    private final static String KEY = "l8I4zb9tirY=";

    /**
     * 获取DES对象
     *
     * @return DES
     */
    private static DES init() {
        return SecureUtil.des(KEY.getBytes());
    }

    /**
     * 加密
     *
     * @param text 要加密的内容
     * @return 加密后的密文
     */
    public static String encrypt(String text) {
        try {
            return text != null ? Base64.encode(init().encrypt(text)) : null;
        } catch (Exception e) {
            log.error("DES加密异常");
        }
        return null;
    }

    /**
     * 解密
     *
     * @param text 要解密的内容
     * @return 解密后的明文
     */
    public static String decrypt(String text) {
        try {
            return text != null ? init().decryptStr(Base64.decode(text)) : null;
        } catch (Exception e) {
            log.error("DES解密异常");
        }
        return null;
    }

    public static void main(String[] args) {
        byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.DES.getValue()).getEncoded();
        String secret = Base64.encode(key);
        // 随机生成 加密解密秘钥 替换上面KEY
        System.out.println("生成的des密钥是: " + secret);

        String encrypt = encrypt("12345678901234567890");
        String decrypt = decrypt(encrypt);

        // 20位加密后是44位
        System.out.println("加密后的结果是: " + encrypt);
        System.out.println("解密后的结果是: " + decrypt);
    }
}
